fn main() {
    // Boolean.
    let b1: bool = true;
    dbg!(&b1);

    // Unsigned integers.
    let i1: u8 = 1;
    let i2: u16 = 1;
    let i3: u32 = 1;
    let i4: u64 = 1;
    let i5: u128 = 1;
    dbg!(&i1, &i2, &i3, &i4, &i5);

    // Signed integers.
    let i6: i8 = 1;
    let i7: i16 = 1;
    let i8: i32 = 1;
    let i9: i64 = 1;
    let i10: i128 = 1;
    dbg!(&i6, &i7, &i8, &i9, &i10);

    // Floating point numbers.
    let f1: f32 = 1.0;
    let f2: f64 = 1.0;
    dbg!(&f1, &f2);

    // Platform specific integers.
    let p1: usize = 1;
    let p2: isize = 1;
    dbg!(&p1, &p2);

    // Characters, &str, and String.
    let c1: char = 'c';
    let s1: &str = "hello";
    let s2: String = String::from("hello");
    dbg!(&c1, &s1, &s2);

    // Arrays.
    let a1 = [1, 2, 3, 4, 5];
    dbg!(&a1);

    let i1 = a1[4];
    dbg!(&i1);

    // Tuples.
    let t1 = (1, 2, 3);
    let t2 = (5, 5.0, "5");
    dbg!(&t1, &t2);

    let s1 = t1.2;
    dbg!(&s1);
    let (i1, f1, s1) = t1;
    dbg!(&s1, &i1, &f1, &s1);

    let unit = ();
    dbg!(&unit);

    // Type aliasing.
    type Age = u8;

    let a1: Age = 57;
    dbg!(&a1);
}
